package com.qc31.comlib.net


import com.qc31.comlib.entity.HBaseBean
import com.qc31.comlib.entity.QrCode
import com.qc31.comlib.entity.UpdateEntity
import io.reactivex.rxjava3.core.Single
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.*

/** @Author pc_hfjs @Date 2022/1/19 16:05 @Desc */
interface ServiceApi {
    /**
     * 传感器查询 type:传感器类型 1：表示油耗 5：水位 carId:车辆ID sdate:开始日期(YYYY-MM-DD)
     * edate:结束日期(YYYY-MM-DD)
     */
    @FormUrlEncoded
    @POST("query/rpt/sensor/days")
    fun getOilStats(
        @Field("type") type: Int,
        @Field("carId") carId: String,
        @Field("sdate") sdate: String,
        @Field("edate") edate: String
    ): Single<HBaseBean>

    /**
     * 传感器明细报表（一车一天） type： 传感器类型 1：表示油耗 5：水位 typeId：传感器类型ID carId:车辆ID
     * date:日期(YYYY-MM-DD)
     */
    @FormUrlEncoded
    @POST("query/rpt/sensor/details")
    fun getOilDayStats(
        @Field("type") type: Int,
        @Field("typeId") typeId: String,
        @Field("carId") carId: String,
        @Field("date") sdate: String
    ): Single<HBaseBean>

    /**
     * 实时定位 teamId：该参数表示获取车队下所有层级子车队的车辆定位，该参数优先级别高于carIds参数
     * carIds：该参数优先级别低于teamId参数，teamId，carIds都为空时获取权限内所有车辆定位
     * simple：该参数为空时或false获取复杂定位信息，反之不为空则显示该车简易定位信息
     * filter：是否过滤无定位车辆，是：true,否：false(默认为true)
     */
    @FormUrlEncoded
    @POST("query/gps/getGpsR")
    fun getGpsR(
        @Field("teamId") teamId: String,
        @Field("carIds") carIds: String,
        @Field("simple") simple: Boolean,
        @Field("filter") filter: Boolean
    ): Single<HBaseBean>

    /** 获取信号线信息 carId：车辆ID type：0:车辆信号线 1:车辆提醒信息 */
    @FormUrlEncoded
    @POST("query/gps/getSgnInfo")
    fun getCarSgnRemind(
        @Field("carId") carIds: String,
        @Field("type") type: String
    ): Single<HBaseBean>


    /**
     * 登录 userId：用户ID loginType：user:用户登录，car:车辆登录
     * password:密码：MD5小写字母32位 plateColor:车辆颜色：loginType为user可以不填
     * loginLang:查询语言：en_US :英语 ， zh_CN:简体中文(默认)， zh_TW:繁体中文
     */
    @FormUrlEncoded
    @POST("app/login")
    fun login(
        @Field("userId") userId: String,
        @Field("password") password: String,
        @Field("loginType") loginType: String,
        @Field("plateColor") plateColor: String,
        @Field("loginLang") loginLang: String,
        @Field("version") version: String,
        @Field("sms") sms: Boolean,
        @Field("smsCode") smsCode: String,
    ): Single<HBaseBean>

    /** 登出 */
    @POST("app/logout")
    fun logout(): Single<HBaseBean>

    /**
     * 获取历史轨迹 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss maxSpeed：速度阀值 stopLong：停车阀值
     * filterInvalid：是否过滤无效定位 filterAppend：是否过滤补报 filterStop：是否过滤停车
     */
    @FormUrlEncoded
    @POST("query/gps/getHistoryGps")
    fun getHistoryGps(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("maxSpeed") maxSpeed: String,
        @Field("stopLong") stopLong: String,
        @Field("filterInvalid") filterInvalid: Boolean,
        @Field("filterAppend") filterAppend: Boolean,
        @Field("filterStop") filterStop: Boolean
    ): Single<HBaseBean>

    /**
     * 获取历史轨迹报警 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss maxSpeed：速度阀值 stopLong：停车阀值
     * filterInvalid：是否过滤无效定位 filterAppend：是否过滤补报 filterStop：是否过滤停车
     */
    @FormUrlEncoded
    @POST("query/gps/getAllHisGps")
    fun getAllHisGps(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("maxSpeed") maxSpeed: String,
        @Field("stopLong") stopLong: String,
        @Field("filterInvalid") filterInvalid: Boolean,
        @Field("filterAppend") filterAppend: Boolean,
        @Field("filterStop") filterStop: Boolean
    ): Single<HBaseBean>

    /**
     * 获取历史轨迹报警 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss maxSpeed：速度阀值 stopLong：停车阀值
     * filterInvalid：是否过滤无效定位 filterAppend：是否过滤补报 filterStop：是否过滤停车
     */
    @FormUrlEncoded
    @POST("query/gps/getHistoryGpsAlarms")
    fun getHistoryGpsAlarms(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("maxSpeed") maxSpeed: String,
        @Field("stopLong") stopLong: String,
        @Field("filterInvalid") filterInvalid: Boolean,
        @Field("filterAppend") filterAppend: Boolean,
        @Field("filterStop") filterStop: Boolean,
        @Field("type") type: String
    ): Single<HBaseBean>

    /** 获取模拟量设置信息 carId：车辆ID type：模拟量类型编号 0是油量，1是载重，2是温度，3是湿度，4是水位 */
    @FormUrlEncoded
    @POST("query/rpt/sensor/sensorCfg")
    fun sensorCfg(
        @Field("carId") carId: String,
        @Field("type") type: String,
    ): Single<HBaseBean>

    /**
     * 模拟量按类型查询 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss type：模拟量类型编号 0是油量，1是载重，2是温度，3是湿度，4是水位
     * index：模拟量索引选项 1:模拟量1 2:模拟量2
     */
    @FormUrlEncoded
    @POST("query/rpt/sensor/sensorInfo")
    fun sensorStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("type") type: String,
        @Field("index") index: String
    ): Single<HBaseBean>

    /** 获取车辆图片 carId：车辆ID type：图片类型 car:车辆 tmn:终端 drv:司机 */
    @FormUrlEncoded
    @POST("query/other/carPhoto")
    fun carPhoto(
        @Field("carId") carId: String,
        @Field("type") type: String
    ): Single<HBaseBean>

    /** 获取车辆图标图例 carId：车辆ID type：图片类型 car:车辆 tmn:终端 drv:司机 */
    @FormUrlEncoded
    @POST("query/other/legend")
    fun legend(
        @Field("carId") carId: String
    ): Single<HBaseBean>

    /** 获取车辆周边 carId：车辆ID radius：半径：单位 米 */
    @FormUrlEncoded
    @POST("query/gps/carAround")
    fun carAround(
        @Field("carId") carId: String,
        @Field("radius") radius: String
    ): Single<HBaseBean>

    /** 获取车队列表 teamId：该参数为空时获取权限内所有车队列表，反之不为空则显示该车队下级车队列表 */
    @FormUrlEncoded
    @POST("query/teamAndCar/getTeamList")
    fun getTeamList(
        @Field("teamId") teamId: String
    ): Single<HBaseBean>

    /** 车辆信息 teamId：该参数为空时获取权限内所有车队列表，反之不为空则显示该车队下级车队列表 */
    @FormUrlEncoded
    @POST("query/teamAndCar/getCarInfo")
    fun getCarInfo(
        @Field("carId") carId: String
    ): Single<HBaseBean>

    /** 车队车辆逐级查询 carId：车队ID video：是否是查询视频车辆，默认为false */
    @FormUrlEncoded
    @POST("query/teamAndCar/teamCarList")
    fun getTeamCarList(
        @Field("teamId") teamId: String,
        @Field("video") video: Boolean
    ): Single<HBaseBean>

    /**
     * 模糊查询车辆 key： 关键词 type：默认为1, 1时，使用车牌号码模糊查询 2时，使用终端号模糊查询
     * 3时，使用SIM卡号模糊查询 4时，使用终端标识模糊查询 video：是否是查询视频车辆，默认为false
     */
    @FormUrlEncoded
    @POST("query/teamAndCar/getCarsLike")
    fun getCarsLike(
        @Field("key") key: String,
        @Field("type") type: String,
        @Field("video") video: Boolean
    ): Single<HBaseBean>

    /** 车辆列表 teamId： 该参数为空时获取权限内所有车队列表，反之不为空则显示该车队下级车队列表 */
    @FormUrlEncoded
    @POST("query/teamAndCar/getTeamCars")
    fun getTeamCars(
        @Field("teamId") teamId: String
    ): Single<HBaseBean>

    /**
     * 车辆修改 carId：车辆ID plate：车牌 plateColor：通过查询通用字典表获取颜色id
     * 不能添加“车牌号+车牌颜色”相同的车辆 teamId：车队ID carName：车辆名称 channelCount：视频通道数
     */
    @FormUrlEncoded
    @POST("maintain/teamCar/modifyCar")
    fun modifyCar(
        @Field("carId") carId: String,
        @Field("plate") plate: String,
        @Field("carName") carName: String,
        @Field("plateColor") plateColor: String,
        @Field("teamId") teamId: String,
        @Field("channelCount") channelCount: String
    ): Single<HBaseBean>

    /** 新增车辆 */
    @Multipart
    @POST("maintain/teamCar/saveCar")
    fun addCar(
        @Part("sessionId") sessionId: String,
        @Part("plate") plate: String,
        @Part("plateColor") plateColor: String,
        @Part("simCard") simCard: String,
        @Part("tmnNo") tmnNo: String,
        @Part("tmnKey") tmnKey: String,
        @Part("teamId") teamId: String,
        @Part("keyType") keyType: String,
        @Part("channelCount") channelCount: String,
        @Part("android") android: String,
        @Part carPhoto: MultipartBody.Part?,
        @Part tmnPhoto: MultipartBody.Part?
    ): Single<HBaseBean>

    /** 新增车辆 */
    @Multipart
    @POST("maintain/teamCar/saveCar")
    fun addCar2(
        @PartMap params: Map<String, @JvmSuppressWildcards RequestBody?>,
        @Part carPhoto: MultipartBody.Part?,
        @Part tmnPhoto: MultipartBody.Part?
    ): Single<HBaseBean>

    /** 删除车辆 carId：车辆ID */
    @FormUrlEncoded
    @POST("maintain/teamCar/delCar")
    fun deleteCar(
        @Field("carId") carId: String
    ): Single<HBaseBean>

    /** 设置车辆关联 carId：车辆ID refId：设备ID或驾驶员ID refId：0表示设备，1表示驾驶员 */
    @FormUrlEncoded
    @POST("maintain/teamCar/carRef")
    fun deleteCar(
        @Field("carId") carId: String,
        @Field("refId") refId: String,
        @Field("type") type: String
    ): Single<HBaseBean>
    /**
     * ******************************** 区域相关
     * ****************************************************
     */
    /**
     * 区域查车 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss regions：区域ID 多个用,隔开
     */
    @FormUrlEncoded
    @POST("query/region/getCarRegions")
    fun getCarRegions(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("regions") regions: String
    ): Single<HBaseBean>

    /** 区域统计 regions：多边形区域Id 多个用“，”隔开 */
    @FormUrlEncoded
    @POST("query/region/getRegionCars")
    fun getRegionCars(
        @Field("regionIds") regions: String
    ): Single<HBaseBean>

    /** 获取权限下所有区域 type：默认不填的情况是目录和区域都获取 否则0-目录;1-区域 */
    @FormUrlEncoded
    @POST("query/region/getRegions")
    fun getRegions(
        @Field("type") type: String
    ): Single<HBaseBean>

    /** 获取权限下所有区域 type：默认1：全部报警类型，2：adas主动安全报警类型 */
    @FormUrlEncoded
    @POST("query/alarm/getAlarmType")
    fun getAlarmType(
        @Field("type") type: Int
    ): Single<HBaseBean>
    /**
     * ******************************** 报警相关
     * ****************************************************
     */
    /**
     * 查询历史报警 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss typeIds：报警类型 speed：速度 duration：持续时长
     */
    @FormUrlEncoded
    @POST("query/alarm/getHistoryAlarms")
    fun getHistoryAlarms(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("typeIds") typeIds: String,
        @Field("speed") speed: String,
        @Field("duration") duration: String
    ): Single<HBaseBean>

    /** 实时报警统计 */
    @POST("query/alarm/getAlarmCount")
    fun getAlarmCount(): Single<HBaseBean>

    /** 查询主动安全附件 carId：车辆ID time： yyyyMMddHHmmss alarmType：报警类型 */
    @FormUrlEncoded
    @POST("query/alarm/getAlarmMedia")
    fun getAlarmMedia(
        @Field("carId") carId: String,
        @Field("time") time: String,
        @Field("alarmType") alarmType: String
    ): Single<HBaseBean>

    /** 设置关注报警类型 typeIds：警报类型ID 用,分隔（例如10,11,12） */
    @FormUrlEncoded
    @POST("maintain/alarm/setAlarms")
    fun setAlarms(
        @Field("typeIds") carId: String
    ): Single<HBaseBean>

    /** 获取报警明细 */
    @FormUrlEncoded
    @POST("query/alarm/alarmDetail")
    fun getAlarmDetail(
        @Field("alarmId") alarmType: String
    ): Single<HBaseBean>
    /**
     * *********************************** 费用相关
     * ***************************************************
     */
    /**
     * 费用添加修改 feeType：FeeRepair:维修费用
     *
     *          FeeAddOil:加油费用
     *          FeeDriverVrf:驾驶员年审费用
     *          FeeInsure: 保险费用
     *          FeeOther:其它费用
     *          FeeTraffic:交通费用
     *          FeeYearVrf: 车辆年审费用
     *  action：add:新增 mdf:修改
     *  entity：操作对象的JSON字符串 数据结构体参见费用类型结构体
     */
    @FormUrlEncoded
    @POST("maintain/cost/saveFee")
    fun saveFee(
        @Field("feeType") feeType: String,
        @Field("action") action: String,
        @Field("entity") entity: String
    ): Single<HBaseBean>

    /**
     * 维修费用添加 feeType：FeeRepair:维修费用 action：add:新增 mdf:修改
     * entity：操作对象的JSON字符串 数据结构体参见费用类型结构体
     */
    @Multipart
    @POST("maintain/cost/saveFee")
    fun saveFee(
        @Part("sessionId") sessionId: String,
        @Part("feeType") feeType: String,
        @Part("action") action: String,
        @Part("entity") entity: String,
        @Part file: List<MultipartBody.Part?>?
    ): Single<HBaseBean>

    /**
     * 费用详情查询 feeType：FeeRepair:维修费用
     *
     *          FeeAddOil:加油费用
     *          FeeDriverVrf:驾驶员年审费用
     *          FeeInsure: 保险费用
     *          FeeOther:其它费用
     *          FeeTraffic:交通费用
     *          FeeYearVrf: 车辆年审费用
     *  carId：车辆ID
     *  stime：开始时间：yyyyMMdd
     *  etime：结束时间：yyyyMMdd
     *  driverName：当feeType为FeeDriverVrf时，传此参数
     */
    @FormUrlEncoded
    @POST("query/cost/queryFeeInfo")
    fun queryFeeInfo(
        @Field("carId") carId: String,
        @Field("feeType") feeType: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("driverName") driverName: String
    ): Single<HBaseBean>

    /** 费用统计 carId：车辆ID stime：开始时间：yyyyMMdd etime：结束时间：yyyyMMdd */
    @FormUrlEncoded
    @POST("query/cost/feeStatis")
    fun feeStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /** 欠费通知 */
    @POST("query/cost/arrearsNotice")
    fun arrearsNotice(
    ): Single<HBaseBean>

    /**
     * 查询升级版本信息 loginWay:登录类型：登录方式ie/cs/wx/android/iphone/ipad/interface
     * appId: APP应用ID ：手机应用分支id,默认与登录类型一致
     */
    @FormUrlEncoded
    @POST("query/sys/getAppVer")
    fun getAppVer(
        @Field("loginWay") loginWay: String,
        @Field("appId") appId: String,
    ): Single<HBaseBean>


    /**
     * 查询通用性字典 types:需要请求的字典类型，多个字典类型同时获取用,分隔（例如PLATE_COLOR, CAR_TYPE,
     * CAR_TRADE） validate: 是否需要登陆后，如果登陆后就要上传sessionId
     */
    @FormUrlEncoded
    @POST("query/sys/getDictionary")
    fun getDictionary(
        @Field("types") types: String,
        @Field("validate") validate: Boolean,
        @Field("loginLang") loginLang: String,
    ): Single<HBaseBean>

    /** 查询关于我们信息 */
    @POST("query/sys/about")
    fun aboutUs(
    ): Single<HBaseBean>

    /** 查询关于我们信息 */
    @POST("query/sys/loginHistory")
    fun loginHistory(
    ): Single<HBaseBean>

    /**
     * ******************************************报表查询*****************************************************
     */


    /**
     * 欠费统计 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/cost/arrearStatistic")
    fun getArrearsInfo(
        @Field("teamId") teamId: String,
        @Field("days") days: Int
    ): Single<HBaseBean>

    /** 里程查询-按日 carId：车辆ID stime：开始时间：yyyyMMdd etime：结束时间：yyyyMMdd */
    @FormUrlEncoded
    @POST("query/rpt/mile/queryMile")
    fun queryMile(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 证件管理 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss type:证件类型（1:运输证管理 2:行驶证管理）
     */
    @FormUrlEncoded
    @POST("query/rpt/cost/certificate")
    fun getCertificate(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("type") type: String
    ): Single<HBaseBean>

    /**
     * 照片查询 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/queryPhoto")
    fun queryPhoto(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 保险查询 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/cost/insurance")
    fun getInsurance(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 停车统计 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss duration：停车**分钟以上 acc：默认值是false表示acc关
     */
    @FormUrlEncoded
    @POST("query/rpt/other/stopStatis")
    fun stopStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("duration") duration: String,
        @Field("acc") acc: Boolean
    ): Single<HBaseBean>

    /** 提醒查询 teamId：车队ID type：0：日期 ，1：里程 */
    @FormUrlEncoded
    @POST("query/rpt/other/queryReminds")
    fun queryReminds(
        @Field("teamId") teamId: String,
        @Field("type") type: String
    ): Single<HBaseBean>

    /** carId：车辆ID date：日期：yyyyMMdd */
    @FormUrlEncoded
    @POST("query/rpt/other/queryHourPoint")
    fun queryHourPoint(
        @Field("carId") carId: String,
        @Field("date") date: String
    ): Single<HBaseBean>

    /**
     * ACC统计 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/accStatis")
    fun accStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 流量统计 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/flowStatis")
    fun flowStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /** 查岗历史 stime：开始时间：yyyyMMddHHmmss etime：结束时间：yyyyMMddHHmmss */
    @FormUrlEncoded
    @POST("query/rpt/other/queryCheck")
    fun queryCheck(
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 日志查询 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/queryLog")
    fun queryLog(
        @Field("action") action: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("typeId") typeId: String,
        @Field("oper") oper: String,
        @Field("cmdId") cmdId: String,
        @Field("carId") carId: String
    ): Single<HBaseBean>

    /**
     * 视频流量统计 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/videoStatis")
    fun videoStats(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /** 日志类型 */
    @POST("query/rpt/other/logType")
    fun logType(
    ): Single<HBaseBean>

    /** 查询权限内指令列表 */
    @POST("query/rpt/other/cmdList")
    fun cmdList(
    ): Single<HBaseBean>

    /**
     * 查询车辆登退签 carId：车辆ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/querySignCar")
    fun querySignCar(
        @Field("carId") carId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /** 驾驶员列表 */
    @POST("query/rpt/other/queryDriver")
    fun queryDriver(
    ): Single<HBaseBean>

    /**
     * 查询驾驶员登退签 drvId：驾驶员ID stime：开始时间：yyyyMMddHHmmss
     * etime：结束时间：yyyyMMddHHmmss
     */
    @FormUrlEncoded
    @POST("query/rpt/other/querySignDriver")
    fun querySignDriver(
        @Field("drvId") drvId: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String
    ): Single<HBaseBean>

    /**
     * 离线统计 objType：cars:车辆 teams:车队 objIds：多个Id用英文逗号分隔
     * queryType：never:从未上线 days:离线天数 offLineType：当queryType=days时才有此属性
     * above:离线n天以上 within:离线n天以内 offLineDays：当queryType=days时才有此属性
     */
    @FormUrlEncoded
    @POST("query/rpt/other/offlineStatIs")
    fun offlineStats(
        @Field("objType") objType: String,
        @Field("objIds") objIds: String,
        @Field("queryType") queryType: String,
        @Field("offLineType") offLineType: String,
        @Field("offLineDays") offLineDays: String
    ): Single<HBaseBean>

    /**
     * 查询设备异常 type：1，或者为空，字符长度为空时则获取异常设备信息 2， 获取具体单个设备异常明细
     * name：请求的异常名称，配合type获取具体某一异常的明细
     */
    @FormUrlEncoded
    @POST("query/rpt/other/deviceExc")
    fun deviceExc(
        @Field("type") type: String,
        @Field("name") name: String
    ): Single<HBaseBean>

    /** 维修列表 */
    @POST("query/repair/getRepairList")
    fun getRepairList(): Single<HBaseBean>

    /**
     * 维修申报 carId：车辆ID tickName：报修人姓名 tickPhone：报修人电话 tickDesc：保修描述
     * file：照片文件
     */
    @Multipart
    @POST("maintain/repair/addRepair")
    fun addRepair(
        @Part("sessionId") sessionId: String,
        @Part("carId") carId: String,
        @Part("tickName") tickName: String,
        @Part("tickPhone") tickPhone: String,
        @Part("tickDesc") tickDesc: String,
        @Part("android") android: String,
        @Part file: List<MultipartBody.Part?>?
    ): Single<HBaseBean>

    /** id：维修信息ID rprDesc：维修回复内容 */
    @FormUrlEncoded
    @POST("maintain/repair/replyRepair")
    fun replyRepair(
        @Field("id") id: String,
        @Field("rprDesc") rprDesc: String
    ): Single<HBaseBean>


    /** 整体数据 */
    @POST("query/other/overallData")
    fun overallData(): Single<HBaseBean>

    /**
     * 指令发送 userId： 用户名 plate： UTF-8编码 carId： 车辆ID
     * plate和carId任选一个，以carId优先 cmdId： 对应平台的指令表的ID
     * cmd： 如果cmdId中有多个命令，这里需要指定使用哪个 params：
     * 请参照下方表格中的params(JSON结构）,请encode成utf-8编码
     */
    @FormUrlEncoded
    @POST("app/cmd/sendCmd")
    fun sendCmd(
        @Field("userId") userId: String,
        @Field("carId") carId: String,
        @Field("cmdId") cmdId: String,
        @Field("cmd") cmd: String,
        @Field("params") params: String
    ): Single<HBaseBean>

    /** 短信指令 */
    @POST("query/other/smsCmd")
    fun smsCmd(): Single<HBaseBean>

    /** 指令常用文本信息 */
    @POST("query/other/cmdNote")
    fun cmdNote(): Single<HBaseBean>

    /** 联系我们 */
    @POST("query/other/contactUs")
    fun contactUs(): Single<HBaseBean>

    /** 修改密码 oldPwd:旧密码 newPwd:新密码 */
    @FormUrlEncoded
    @POST("app/uptPwd")
    fun uptPwd(
        @Field("password") password: String,
        @Query("pwdConvert") pwdConvert: Boolean
    ): Single<HBaseBean>

    /** 是否开启短信验证 teamId：车队ID */
    @GET("app/loginPre")
    fun loginPre(): Single<HBaseBean>

    /**
     * 获取短信验证码 userId：用户ID loginType：user:用户 car:车辆 plateColor：车辆颜色ID
     */
    @FormUrlEncoded
    @POST("app/smsCode")
    fun sendSms(
        @Field("userId") userId: String,
        @Field("loginType") loginType: String,
        @Field("plateColor") plateColor: String,
        @Field("loginLang") loginLang: String
    ): Single<HBaseBean>

    /** 消息推送 isPush：ture：开启推送，false：关闭推送 clientId：推送链接ID */
    @FormUrlEncoded
    @POST("app/push")
    fun push(
        @Field("isPush") isPush: Boolean = true,
        @Field("clientId") clientId: String
    ): Single<HBaseBean>

    /** 查询系统信息 */
    @GET("query/sys/getSysMsg")
    fun getSysMsg(): Single<HBaseBean>


    /**
     * **************************************其它************************************************
     */
    /** 二维码扫描 */
    @GET
    fun getQrCarInfo(@Url url: String): Single<QrCode>

    /** 根据IP查询都端口接口 */
    @GET
    fun getPortByAddr(@Url url: String): Single<HBaseBean>

    /** 升级提示 */
    @GET
    fun getUpdate(@Url url: String?): Single<UpdateEntity>


    /**
     * ***********************************视频************************************************
     */
    @GET("{method}")
    fun getVideoState(@Path("method") method: String): Single<String>

    @GET
    fun getState(@Url method: String): Single<String>

    //提交维修费用照片接口
    @Multipart
    @POST("maintain/cost/file")
    fun upPhoto(
        @Part("sessionId") sessionId: String,
        @Part("addfile") addfile: String,
        @Part photo: MultipartBody.Part?
    ): Single<HBaseBean>


    /**
     * ****************************** 微信分享
     * *********************************************
     */
    /** 微信分享实时定位，轨迹 */
    @FormUrlEncoded
    @POST("app/wxShare")
    fun shareLine(
        @Field("carId") carId: String,
        @Field("shareType") shareType: String,
        @Field("stime") stime: String,
        @Field("etime") etime: String,
        @Field("filter0") filter0: String,
        @Field("filterInvalid") filterInvalid: String,
        @Field("filterAppend") filterAppend: String,
    ): Single<HBaseBean>

    @FormUrlEncoded
    @POST("app/wxShare")
    fun shareLocation(
        @Field("carId") carId: String,
        @Field("shareType") shareType: String,
    ): Single<HBaseBean>

    /** 查询权限下所有标注 */
    @POST("query/other/getPoiS")
    fun getPoiS(): Single<HBaseBean>

    /** 查询用户自定义设置 */
    @POST("setting/getCfg")
    fun getAppCfg(): Single<HBaseBean>

    /** 保存信息设置 */
    @FormUrlEncoded
    @POST("setting/saveData")
    fun saveAppCfg(
        @Field("key") key: String,
        @Field("data") data: String
    ): Single<HBaseBean>

    /**
     * Get car cfg
     *
     * @param carId
     */
    @FormUrlEncoded
    @POST("setting/queryGpsColumnByCar")
    fun getCarCfg(
        @Field("carId") carId: String
    ): Single<HBaseBean>

    /** 保存单车信息设置 */
    @FormUrlEncoded
    @POST("setting/saveGpsColumnByCar")
    fun saveCarCfg(
        @Field("carIds") carIds: String,
        @Field("data") data: String
    ): Single<HBaseBean>
}